<?php

require_once 'classes/Batiment.php';
require_once 'SCinterface.php';
require_once 'classes/Message.php';
require_once '../config/config.php';

/**
 * Classe du service CRUD pour la gestion des batiments
 * 
 * @author Manixab Billy
 */

class SCbatiment {
    
    private $db;
    
    /**
     *Contructeur créant l'objet pour la connexion à la DB 
     */
    public function __construct() {
        $this->db = new PDO(ACA_DB_DSN, ACA_DB_USER, ACA_DB_PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));
        $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        
    }
    
    /**
     * Ajoute un batiment
     * @param unBatiment un Batiment à ajouter
     * @return Message
     */
    public function ajouter($unBatiment) {
        try {
            
            $query =  $this->db->prepare("INSERT INTO batiment " .
                   "(nom) VALUES(:nom)");

            $query->execute(array(
                    'nom'              => $unBatiment->getNom()
               ));
            

        }
        catch(PDOException $e) {
            return new Message("Batiment non ajouté: ".$e->getMessage());
        }
        return $unBatiment;
    }
    
    /**
     * Methode permettant de modifier un batiment
     * @param unBatiment Batiment à modifier
     * @return Message  
     */
    public function modifier($unBatimentAModifier, $nvBatiment) {
        try {
            $query = "UPDATE batiment SET 
                nom = '".$nvBatiment->getNom()."'
                     WHERE nom='".$unBatimentAModifier->getNom()."';";
            
            $this->db->query($query);
        }
        catch(PDOException $e) {
            return new Message("Batiment non modifié: ".$e->getMessage());
        }
        return $nvBatiment;
    }
    
    /**
     * Methode permettant de supprimer un batiment
     * @param unBatiment Batiment à supprimer
     * @return Message  
     */
    public function supprimer($unBatimentASupprimer) {
        try{
            $query = "DELETE FROM batiment WHERE nom = '".$unBatimentASupprimer."';";
                   
            $this->db->exec($query);
            $message = new Message("Batiment supprimé");
        }
        catch(PDOException $e){
            $message = new Message("Batiment non supprimé: ".$e->getMessage());
        }
        return $message;
    }
    
     /**
     * @param unBatiment Batiment de recherche sous forme d'objet Batiment
     * @return un tableau d'objet Batiment
     */
    public function lister($batimentALister){
        try{
            $sql="SELECT * FROM batiment ";
            $sql_Where="WHERE";
            if($batimentALister!=NULL)
            {
                if($batimentALister->getNom()!=NULL)
                    $sql_Where.=" nom = '".$batimentALister->getNom()."' AND ";
            }         
                
            $sql_Where = substr($sql_Where,0,-5); 
            $sql.=$sql_Where." ORDER BY nom;";
            $lesBatimentsTrouves=NULL;
            $unBatimentLu=NULL;
            $result=$this->db->query($sql);
            while($row = $result->fetch(PDO::FETCH_ASSOC))
            {   
                $unBatimentLu = new Batiment($row['nom']);
               
                    $lesBatimentsTrouves[]=$unBatimentLu;
            }        
        }
        catch(PDOException $e)
        {
            print($e->getMessage());
            $lesBatimentsTrouves=NULL;
        }
        return $lesBatimentsTrouves;
    }
}
?>
